package com.cloudfun.campusshare.service;

import com.cloudfun.campusshare.common.constant.RoleType;
import com.cloudfun.campusshare.common.model.dto.RoleCreateDTO;
import com.cloudfun.campusshare.common.model.dto.RoleModifyDTO;
import com.cloudfun.campusshare.common.model.vo.RoleDetailVO;
import com.cloudfun.campusshare.common.model.vo.RoleListVO;
import com.cloudfun.campusshare.common.response.PageResult;
import com.cloudfun.campusshare.common.security.UserAuthentication;
import com.cloudfun.campusshare.entity.RoleEntity;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * Created by Huqin on 2019/12/23
 */
public interface RoleService {

    /**
     * 创建
     *
     * @param createDTO
     */
    void create(RoleCreateDTO createDTO);

    /**
     * 更新
     *
     * @param modifyDTO
     */
    void modify(RoleModifyDTO modifyDTO);

    /**
     * 绑定角色类型
     *
     * @param userId
     * @param roleTypes
     */
    void bindRoleTypes(String userId, List<RoleType> roleTypes);

    /**
     * 绑定角色
     *
     * @param userId
     * @param roleIds
     */
    void bindRoles(String userId, List<String> roleIds);

    /**
     * 解绑角色
     *
     * @param userId
     */
    void unbindRoles(String userId);

    /**
     * 获取角色
     *
     * @param userId
     * @return
     */
    Set<String> getRoleTypes(String userId);

    /**
     * 获取角色
     *
     * @param userId
     * @return
     */
    Set<String> getRoleIds(String userId);

    /**
     * 填充用户认证
     *
     * @param userAuthentication
     */
    void fillUserAuthentication(UserAuthentication userAuthentication);

    /**
     * 搜索
     *
     * @param pageable
     * @param keyword
     * @return
     */
    PageResult<RoleListVO> search(Pageable pageable, String keyword);

    /**
     * 删除
     *
     * @param id
     */
    void delete(String id);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    RoleDetailVO detail(String id);

    /**
     * 启用\停用
     *
     * @param id
     * @param enable
     */
    void enableOrDisable(String id, Boolean enable);

    /**
     * 角色简单列表
     *
     * @return
     */
    List<RoleListVO> getSimpleList();

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    Optional<RoleEntity> getById(String id);
}
